// 封装axios函数
// 目的：
// 1.利用axios请求、响应拦截功能，减少重复代码。请求拦截：请求头携带公共参数；响应拦截：简化返回数据，处理网络错误
import useUserStore from "@/store/modules/user";
import axios from "axios";
import { ElMessage } from "element-plus";
import { de } from "element-plus/es/locales.mjs";
// 设置基础路径、默认超时时间
const request = axios.create({
    baseURL: "/api",//请求的基础路径的设置
    // timeout: 5000,  // 5s超时
    headers: {
        "Content-Type": "application/json;charset=utf-8",
    },
});

//请求拦截器
request.interceptors.request.use((config) => {
    let userStore = useUserStore();
    if (userStore.userInfo?.token) {
        config.headers.token = userStore.userInfo.token;
    }
    return config;
});


//响应拦截器
request.interceptors.response.use(
    (response) => {
        // 2xx状态码
        //响应拦截器成功的回调,一般会进行简化数据
        return response.data;
    },
    (error) => {
        //处理http网络错误
        let status = error.response?.status;
        switch (status) {
            case 404:
                //错误提示信息
                ElMessage({
                    type: 'error',
                    message: '请求失败路径出现问题'
                })
                break;
            case 500 | 501 | 502 | 503 | 504 | 505:
                ElMessage({
                    type: 'error',
                    message: '服务器挂了'
                })
                break;
            case 401:
                ElMessage({
                    type: 'error',
                    message: '参数有误'
                })
                break;
            default:
                ElMessage({
                    type: 'error',
                    message: '未知错误'
                })
                return Promise.reject(new Error(error.message))
        }
    }
);

//对外暴露axios
export default request;